"""
1、抽象类不能被实例化
2、抽象类需要继承 ABC，并且需要至少一个抽象方法
3、抽象类中可以有普通方法
4、如果一个类继承了抽象类，则它必须实现抽象类的所有抽象方法，否则它仍然是一个抽象类
"""

"""
1、@overload 装饰的函数体必须是 ...
2、必须有一个实际的实现函数
3、重载仅用于类型检查，不影响运行时行为
4、IDE 和类型检查器会使用重载信息
"""
from typing import overload, Union, Optional, List
from datetime import datetime


class DataHandler:
    @overload
    def process_data(self, data: int, format: bool = False) -> str:
        ...

    @overload
    def process_data(self, data: str, format: bool = False) -> dict:
        ...

    @overload
    def process_data(self, data: List[Union[int, str]], format: bool = True) -> List[dict]:
        ...

    def process_data(
            self,
            data: Union[int, str, List[Union[int, str]]],
            format: bool = False
    ) -> Union[str, dict, List[dict]]:
        if isinstance(data, int):
            result = str(data)
            return f"formatted: {result}" if format else result
        elif isinstance(data, str):
            result = {"value": data}
            return {"formatted": result} if format else result
        else:
            results = [
                {"value": str(item)} if isinstance(item, int) else {"value": item}
                for item in data
            ]
            return [{"formatted": r} for r in results] if format else results
